package com.ning.farm_income_back.controller;

import com.github.pagehelper.PageInfo;
import com.ning.farm_income_back.domain.Users;
import com.ning.farm_income_back.service.UsersService;
import com.ning.farm_income_back.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController //标识该类为控制器，并自动将返回值转为 JSON/XML
@RequestMapping("/users") //定义控制器的基础请求路径
public class UsersController {

    @Autowired //自动装配 Spring 容器中的 Bean
    UsersService usersService;

    /*
    @RequestBody	将请求体中的 JSON/XML 数据绑定到 Java 对象
    @RequestParam 是 Spring MVC 中用于从 HTTP 请求中提取查询参数（Query Parameters）或表单数据的注解。
     */
    //分页带条件查询
    @PostMapping("/page")//处理 HTTP POST 请求（新增操作）
    public ResultVo<PageInfo> page(@RequestBody Users users, @RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "3") Integer pageSize ) {

        if(pageNum == null || pageNum < 1) pageNum = 1;
        //获取页面数据 总条数 总页数
        PageInfo pageInfo = usersService.getPage(users,pageNum,pageSize);
        return ResultVo.success("页面数据查询成功",pageInfo);
    }

    @PostMapping("/addOrUpdateUsers")
    public ResultVo addOrUpdateUsers(@RequestBody Users users) {
        usersService.addOrUpdateUser(users);
        return ResultVo.success("新增成功");
    }

    //更改状态
    @PutMapping("/updateStatus")
    public ResultVo updateStatus(@RequestBody Users users) {
        usersService.updateStatus(users);
        return ResultVo.success("更改状态成功");
    }

    //删除用户
    @DeleteMapping("/deleteUser/{id}")
    public ResultVo deleteUser(@PathVariable Integer id) {
        usersService.deleteUser(id);
        return ResultVo.success("删除用户成功");
    }

    //根据用户名获取用户
    @GetMapping("/getUserByUsername/{username}")
    public ResultVo<Users> getUserByUsername(@PathVariable String username) {
        Users u = usersService.getUser(username);
        return ResultVo.success("查询成功",u);
    }

    //更新用户信息
    @PutMapping("/updateUserInfo")
    public ResultVo getUserByUsername(@RequestBody Users users) {
        usersService.addOrUpdateUser(users);
        return ResultVo.success("更新成功");
    }

}
